package com.bjsxt.userscenter.outer.service.impl;

import java.util.Date;
import java.util.UUID;

import javax.annotation.Resource;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONObject;
import com.bjsxt.userscenter.common.util.ConstatFinalUtil;
import com.bjsxt.userscenter.common.util.DateFormatUtil;
import com.bjsxt.userscenter.outer.service.IOuterService;
import com.bjsxt.userscenter.users.pojo.AAdmins;
import com.mysql.jdbc.authentication.Sha256PasswordPlugin;

/**
 * 接口的实现类
 * @author WangshSxt
 *
 */
@Service("outerService")
public class OuterServiceImpl implements IOuterService
{
	@Resource
	private DateFormatUtil dateFormatUtil;
	
	/**
	 * 验证加密的字符串
	 * 
	 * 加密参数;sha256(version+pubKey+私钥) 
	 * 
	 * @return
	 */
	private JSONObject verifyEncryptStr(JSONObject reqJSON)
	{
		JSONObject resultJSON = new JSONObject() ; 
		String version = reqJSON.getString("version");
		String pubKey = reqJSON.getString("pubKey");
		String encryptStr = reqJSON.getString("encryptStr");
		
		/* 为了安全,私钥不能从请求中获取,读取本地的配置文件
		 * 私钥:客户端和服务器端同时存储到配置文件中
		 *  */
		String priKey = ConstatFinalUtil.CONFIG_JSON.getString("private.key");
		
		String encHou = DigestUtils.sha256Hex(version + pubKey + priKey);
		if(encHou.equalsIgnoreCase(encryptStr) || "0".equalsIgnoreCase(ConstatFinalUtil.CONFIG_JSON.getString("version")))
		{
			/* 成功 */
			resultJSON.put("code", "0");
			resultJSON.put("info", ConstatFinalUtil.INFO_JSON.get("0") + "");
		}else
		{
			/* 请求非法,您在恶意攻击 */
			resultJSON.put("code", "14");
			resultJSON.put("info", ConstatFinalUtil.INFO_JSON.get("14") + "");
		}
		return resultJSON ; 
	}
	
	@Override
	public JSONObject verfiyToken01Service(JSONObject reqJSON)
	{
		JSONObject resultJSON = new JSONObject() ; 
		/* 验证一下,加密字符串是否合法 */
		resultJSON = this.verifyEncryptStr(reqJSON);
		if(!"0".equalsIgnoreCase(resultJSON.get("code") + ""))
		{
			/* 加密字符串验证不通过 */
			return resultJSON ; 
		}
		
		/* 处理数据
		 * 取到token,根据token,查询对应的管理员对象
		 *  */
		JSONObject dataReqJSON = (JSONObject) reqJSON.get("data");
		String token = dataReqJSON.get("token") + "";
		JSONObject adminsJSON = (JSONObject) ConstatFinalUtil.ADMINS_MAP.get(token);
		
		if(adminsJSON != null)
		{
			/* 拼装下行数据 */
			JSONObject dataResJSON = new JSONObject() ; 
			dataResJSON.put("admins", adminsJSON);
			resultJSON.put("data", dataResJSON);
			resultJSON.put("code", "0");
			resultJSON.put("info", ConstatFinalUtil.INFO_JSON.get("0") + "");
		}else
		{
			/* 木有登陆,token非法  */
			resultJSON.put("code", "12");
			resultJSON.put("info", ConstatFinalUtil.INFO_JSON.get("12") + "");
		}
		return resultJSON;
	}

	@Override
	public String saveTokenService(AAdmins admins)
	{
		String token = UUID.randomUUID().toString() ; 
		/* 管理员的JSON对象
		 * {
		 * 		"id":""
		 *		"email":"",
		 *		"name":""
		 *		"lastLoginTime":""
		 * }
		 *  */
		JSONObject adminsJSON = new JSONObject() ; 
		adminsJSON.put("id", admins.getId() + "");
		adminsJSON.put("email", admins.getEmail());
		adminsJSON.put("name", admins.getName());
		adminsJSON.put("lastLoginTime", dateFormatUtil.dateTimeStr(admins.getLastLoginTime()));
		/* 验证token过期时间 */
		adminsJSON.put("verifyDate", this.dateFormatUtil.dateTimeStr(new Date()));
		/*
		 * JAVASE Map:key:uuid(Token),值是管理员对象(JSON);
		 * Map
		 * */
		ConstatFinalUtil.ADMINS_MAP.put(token, adminsJSON);
		ConstatFinalUtil.SYS_LOGGER.info("管理员map:{}",ConstatFinalUtil.ADMINS_MAP);
		return token ; 
	}

}
